{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "Untitled4.ipynb",
      "provenance": [],
      "authorship_tag": "ABX9TyPUrCIwG2rqfjmaPmRRpl53",
      "include_colab_link": true
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    }
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "view-in-github",
        "colab_type": "text"
      },
      "source": [
        "<a href=\"https://colab.research.google.com/github/edgarriba/kornia-examples/blob/master/render_gaussian2d.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "fDnWsMBBpcAG",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 278
        },
        "outputId": "aa4cc875-df54-4e5d-bf2c-bb5ee14a5634"
      },
      "source": [
        "pip install kornia matplotlib"
      ],
      "execution_count": 1,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Collecting kornia\n",
            "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/bd/b8/c137c3d0cc52a856d3f80ccc37281cc558df8c0b6b5f54d4cd78f4c3fb99/kornia-0.2.0-py2.py3-none-any.whl (142kB)\n",
            "\u001b[K     |████████████████████████████████| 143kB 2.8MB/s \n",
            "\u001b[?25hRequirement already satisfied: matplotlib in /usr/local/lib/python3.6/dist-packages (3.2.1)\n",
            "Requirement already satisfied: pillow>=6.2.0 in /usr/local/lib/python3.6/dist-packages (from kornia) (7.0.0)\n",
            "Requirement already satisfied: torch>=1.0.0 in /usr/local/lib/python3.6/dist-packages (from kornia) (1.4.0)\n",
            "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.6/dist-packages (from matplotlib) (0.10.0)\n",
            "Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib) (2.4.6)\n",
            "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib) (1.1.0)\n",
            "Requirement already satisfied: numpy>=1.11 in /usr/local/lib/python3.6/dist-packages (from matplotlib) (1.18.2)\n",
            "Requirement already satisfied: python-dateutil>=2.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib) (2.8.1)\n",
            "Requirement already satisfied: six in /usr/local/lib/python3.6/dist-packages (from cycler>=0.10->matplotlib) (1.12.0)\n",
            "Requirement already satisfied: setuptools in /usr/local/lib/python3.6/dist-packages (from kiwisolver>=1.0.1->matplotlib) (46.0.0)\n",
            "Installing collected packages: kornia\n",
            "Successfully installed kornia-0.2.0\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "1fxb3GKfpt_M",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "%matplotlib inline\n",
        "import matplotlib.pyplot as plt\n",
        "\n",
        "import torch\n",
        "import kornia as K"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "mxy5tEJdpyeh",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 787
        },
        "outputId": "b541d7fa-8c90-4b57-8d38-902cfe4b9b4f"
      },
      "source": [
        "H, W = 100, 100  # heatmap output\n",
        "\n",
        "xy = torch.tensor([[50., 50.], [25., 25.]])\n",
        "std = torch.ones_like(xy)\n",
        "\n",
        "heatmap = K.geometry.render_gaussian_2d(xy, std, (H, W), False)\n",
        "\n",
        "plt.figure()\n",
        "plt.imshow(K.tensor_to_image(heatmap[0]))\n",
        "\n",
        "plt.figure()\n",
        "plt.imshow(K.tensor_to_image(heatmap[1]))\n",
        "\n",
        "plt.figure()\n",
        "plt.imshow(K.tensor_to_image(heatmap.sum(0)))"
      ],
      "execution_count": 11,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<matplotlib.image.AxesImage at 0x7ff613aba7b8>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 11
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\nu1kS/wW2kpU7Ncu4gwAAAABJRU5ErkJggg==\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPsAAAD7CAYAAACscuKmAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0\ndHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAPWklEQVR4nO3dXYxc9X3G8e8zrzteQ+wFY4ztBle4\npIiKEq0CiKqqcFApTQMXKCJCkVUh+SZtyItEoL2oclckFMJFFcnCjawKJaQEFUqjRNQhlXpRFxNQ\ng20IDhSwMfYSbLze9e68/Xpxju3FXcezuzM7M/yfj7TsnjkzPj8d+etz5swxVkRgZh9/hX4PYGbL\nw7GbJcKxmyXCsZslwrGbJcKxmyViSbFLuk3Sa5IOSHqgW0OZWfdpsZ+zSyoCvwJuBQ4CLwBfjIh9\n3RvPzLqltITXfgY4EBFvAEj6AXAHcN7YK6rGCKNL2KSZ/TYzTFGPWc23bimxrwfembN8ELjh3CdJ\n2gZsAxhhBTdoyxI2aWa/ze7Ydd51Pb9AFxHbI2I8IsbLVHu9OTM7j6XEfgjYOGd5Q/6YmQ2gpcT+\nArBZ0iZJFeBu4JnujGVm3bbo9+wR0ZT0V8BPgSLwjxGxt2uTmVlXLeUCHRHxY+DHXZrFzHrId9CZ\nJcKxmyXCsZslwrGbJcKxmyXCsZslwrGbJcKxmyXCsZslwrGbJcKxmyXCsZslwrGbJcKxmyXCsZsl\nwrGbJcKxmyXCsZslwrGbJcKxmyXCsZslwrGbJcKxmyXCsZslwrGbJcKxmyXCsZslwrGbJcKxmyXC\nsZslwrGbJcKxmyXCsZslwrGbJcKxmyXigrFL2ijpeUn7JO2VdF/++Jik5yS9nn9f3ftxzWyxOjmy\nN4FvRMQ1wI3AlyVdAzwA7IqIzcCufNnMBtQFY4+IwxHxi/znSWA/sB64A9iZP20ncGevhjSzpSst\n5MmSrgSuB3YDayPicL7qPWDteV6zDdgGMMKKxc5pZkvU8QU6SSuBHwFfjYgTc9dFRAAx3+siYntE\njEfEeJnqkoY1s8XrKHZJZbLQH4+Ip/KHj0hal69fBxztzYhm1g2dXI0XsAPYHxHfnrPqGWBr/vNW\n4OnujzfgpLNfhWL2dXrZbMB08p79ZuBLwC8lvZw/9jfA3wM/lHQv8Bbwhd6MOMBUQAVBsYgkIgJa\n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\nJcKxmyXCsZslwrGbJcKxmyXCsZslwrGbJcKxmyXCsZslwrGbJcKxmyXCsZslwrGbJcKxmyXCsZsl\nwrGbJcKxmyXCsZslwrGbJcKxmyWio9glfU3SXkmvSPq+pBFJmyTtlnRA0hOSKr0e1swW74KxS1oP\nfAUYj4hrgSJwN/AQ8EhEXAUcA+7t5aBmtjSdnsaXgJqkErACOAzcAjyZr98J3Nn98cysWy4Ye0Qc\nAh4G3iaL/EPgReB4RDTzpx0E1s/3eknbJO2RtKfBbHemNrMF6+Q0fjVwB7AJuAIYBW7rdAMRsT0i\nxiNivEx10YOa2dJ0chr/WeDNiJiIiAbwFHAzsCo/rQfYABzq0Yxm1gWdxP42cKOkFZIEbAH2Ac8D\nd+XP2Qo83ZsRzawbOnnPvpvsQtwvgF/mr9kOfBP4uqQDwCXAjh7OaWZLpIhYto1drLG4QVuWbXtm\nqdkduzgRH2i+db6DziwRjt0sEY7dLBGO3SwRjt0sEY7dLBGO3SwRjt0sEY7dLBGO3SwRjt0sEY7d\nLBGO3SwRjt0sEY7dLBGO3SwRjt0sEY7dLBGO3SwRjt0sEY7dLBGO3SwRjt0sEY7dLBGO3SwRjt0s\nEY7dLBGO3SwRjt0sEY7dLBGO3SwRjt0sEY7dLBGO3SwRjt0sEY7dLBGO3SwRiojl25g0AUwB7y/b\nRpfmUoZnVhiueYdpVhieeT8ZEWvmW7GssQNI2hMR48u60UUapllhuOYdpllh+Oadj0/jzRLh2M0S\n0Y/Yt/dhm4s1TLPCcM07TLPC8M37/yz7e3Yz6w+fxpslwrGbJWLZYpd0m6TXJB2Q9MBybbdTkjZK\nel7SPkl7Jd2XPz4m6TlJr+ffV/d71tMkFSW9JOnZfHmTpN35Pn5CUqXfM54maZWkJyW9Kmm/pJsG\ndd9K+lr+e+AVSd+XNDLI+7ZTyxK7pCLwD8CfAdcAX5R0zXJsewGawDci4hrgRuDL+YwPALsiYjOw\nK18eFPcB++csPwQ8EhFXAceAe/sy1fweBX4SEZ8CriObe+D2raT1wFeA8Yi4FigCdzPY+7YzEdHz\nL+Am4Kdzlh8EHlyObS9h5qeBW4HXgHX5Y+uA1/o9Wz7LBrJAbgGeBUR2h1dpvn3e51k/AbxJfkF4\nzuMDt2+B9cA7wBhQyvftnw7qvl3I13Kdxp/egacdzB8bSJKuBK4HdgNrI+Jwvuo9YG2fxjrXd4D7\ngXa+fAlwPCKa+fIg7eNNwATwvfxtx2OSRhnAfRsRh4CHgbeBw8CHwIsM7r7tmC/QnUPSSuBHwFcj\n4sTcdZH9sd73zyolfQ44GhEv9nuWDpWATwPfjYjryf5+xEdO2Qdo364G7iD7A+oKYBS4ra9Ddcly\nxX4I2DhneUP+2ECRVCYL/fGIeCp/+Iikdfn6dcDRfs03x83A5yX9L/ADslP5R4FVkkr5cwZpHx8E\nDkbE7nz5SbL4B3HffhZ4MyImIqIBPEW2vwd133ZsuWJ/AdicX9GskF3weGaZtt0RSQJ2APsj4ttz\nVj0DbM1/3kr2Xr6vIuLBiNgQEVeS7cufRcQ9wPPAXfnTBmJWgIh4D3hH0tX5Q1uAfQzgviU7fb9R\n0or898TpWQdy3y7IMl74uB34FfBr4G/7fbFinvn+iOw08n+Al/Ov28neC+8CXgf+HRjr96znzP0n\nwLP5z78L/DdwAPhnoNrv+ebM+YfAnnz//guwelD3LfAt4FXgFeCfgOog79tOv3y7rFkifIHOLBGO\n3SwRjt0sEY7dLBGO3SwRjt0sEY7dLBH/B4Q/iCxeHq8GAAAAAElFTkSuQmCC\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    }
  ]
}